package com.own.business.exam.entity.open;

import com.own.business.exam.entity.vo.ExamPaperVo;
import com.own.component.common.model.ResultModel;
import lombok.NonNull;

import java.math.BigDecimal;

/**
 * BaseOpenExamPaper
 *
 * @author 陈学礼 （你是一段成熟的代码，要学会自己改bug）
 * @version 4.0.0
 * @date 2021-6-17 17:15:24
 * @since 4.0.0
 */
public interface BaseOpenExamPaper {

    /**
     * 提交试卷
     *
     * @param userId 待获取考试的用户id
     * @param examId 考试id
     * @return 试卷信息
     */
    ResultModel<ExamPaperVo> submit(@NonNull Long userId, Long examId);

    /**
     * 根据考试id获取试卷信息
     *
     * @param userId  待获取考试的用户id
     * @param account 待获取考试的用户账号
     * @param examId  考试id
     * @return 试卷信息
     */
    ResultModel<ExamPaperVo> getPaperByExamId(@NonNull Long userId, @NonNull String account, Long examId);

    /**
     * 根据考试id获取试卷的分数信息
     *
     * @param userId 待获取考试分数的用户id
     * @param examId 考试id
     * @return 分数信息
     */
    ResultModel<BigDecimal> getScoreByExamId(@NonNull Long userId, Long examId);

    /**
     * 根据考试id获取试卷信息（不会生成试卷）
     *
     * @param userId 待获取试卷的用户id
     * @param examId 考试id
     * @return 试卷信息
     */
    ResultModel<ExamPaperVo> getResultPaperByExamId(@NonNull Long userId, Long examId);

    /**
     * 根据考试id获取试卷的排名信息
     *
     * @param userId 待获取考试成绩排名的用户id
     * @param examId 考试id
     * @return 分数信息
     */
    ResultModel<Long> getRankByExamId(@NonNull Long userId, Long examId);

}
